<?php

//Sécurise une chaîne, en enlevant d'évenutels codes malicieux. Ne jamais appeler deux fois sur une chaîne, et pas avant l'intégration en db.
function get_data_propre_sortie_db($data) {
	return htmlspecialchars($data, ENT_QUOTES);
}
//Etablie la liaison à la base de donnée et renvoie l'objet mysqli. Ouvre également la session, en configurant sa durée de vie.
function new_mysqli($host, $user, $password, $database) {
        ini_set('session.save_path', $_SERVER["DOCUMENT_ROOT"].'/perso/sessions');
        ini_set('session.gc_maxlifetime', 86400); //Les sessions sont actives 24 heures sans activité
        session_start();
	$mysqli = new mysqli($host, $user, $password, $database);
	if($mysqli->connect_errno) gere_mysqli_error($mysqli->connect_error);
	if(!$mysqli->set_charset("utf8")) gere_mysqli_error($mysqli->error);
	return $mysqli;
}

//Envoie une requête mysql, en gérant une eventuelle erreur.
function mysqli_query_with_error($mysqli, $query) {
	$result = $mysqli->query($query);
	if(!$result) gere_mysqli_error($mysqli->error, $query);
	return $result;
}
//Envoie une requête mysql, en gérant une eventuelle erreur.
function mysqli_multi_query_with_error($mysqli, $multiquery) {
	if(!$mysqli->multi_query($multiquery)) gere_mysqli_error($mysqli->error, $multiquery);
	$resutl = "";
	do {$resutl = $mysqli->store_result();} while ($mysqli->more_results() && $mysqli->next_result()); //Vidage des resultats (obligatoire, sinon les requetes suivantes plantent)
	return $resutl; //On retourne le dernier résultat.
}
//Gère une erreur dans la communication avec la base de donnée. TODO une fois la phase de dev terminée, ne plus utiliser die, masquer les infos confidentielles et mettre un message d'erreur poli.
function gere_mysqli_error($error, $query = "") {
	die("error : ".$error."<br>Query : ".$query);
}
//Récupère une ligne de la base de donnée
function get_line_in_db($mysqli, $table, $champ_id, $id, $champ_return = "*") {
	if(!(is_alpha_num($table) && is_alpha_num($champ_id) && is_alpha_num($id) && (preg_match("#^[a-zA-Z0-9_, -]+$#" , $champ_return) || $champ_return == "*")))
		return NULL;
	$result = mysqli_query_with_error($mysqli, "SELECT $champ_return FROM $table WHERE $champ_id='$id' LIMIT 1");
	return $result->fetch_assoc();
}
//Récupère un champ d'une ligne de la base de donnée.
function get_data_in_db($mysqli, $table, $champ_id, $id, $champ_return) {
	$line = get_line_in_db($mysqli, $table, $champ_id, $id, $champ_return);
	if($line == NULL || $line == false)
		return NULL;
	return get_data_propre_sortie_db($line[$champ_return]);
}
//Récupère le nombre de lignes de la base de donnée correspondant à une condition
function get_line_numbers($mysqli, $table, $champ_id, $id) {
	if(!(is_alpha_num($table) && is_alpha_num($champ_id) && is_alpha_num($id)))
		return NULL;
	$result = mysqli_query_with_error($mysqli, "SELECT COUNT(*) as count FROM $table WHERE $champ_id='$id'")->fetch_assoc();
	return $result['count'];
}

function is_moderateur($mysqli, $id_user, $id_forum){
    if(get_num($id_user) == 0 || get_num($id_forum) == 0)
        return false;
    $permissions = mysqli_query_with_error($mysqli, "SELECT COUNT(*) as count FROM modo_perms WHERE (forum_id = $id_forum || forum_id = -1) AND user_id = $id_user")->fetch_assoc(); //forum_id = -1 veut dire modo partout.
    return ($permissions['count'] > 0);
}
